package net.feixiang.creational.prototype.contrary;

import net.feixiang.creational.prototype.WorkExperience;

/**
 * 浅拷贝演示类
 * <p>
 * 该类演示了一个反例实现，使用构造方法创建副本，但只实现了浅拷贝，导致嵌套对象（工作经历）被共享。
 * </p>
 *
 * @author 飞翔
 * @see <a href="https://www.feixiang.net/Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E7%AC%AC%E4%B8%80%E7%AB%A0%E3%80%81%E5%88%9B%E5%BB%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F/14.html">建造者模式</a>
 */
public class ShallowCopyDemo {
    public static void main(String[] args) {
        // 创建原始简历
        WorkExperience originalExp = new WorkExperience("飞翔软件公司", 3);
        Resume originalResume = new Resume("飞翔", "男", 28, originalExp);

        // 通过构造方法创建副本（错误方式）
        Resume copiedResume = new Resume(originalResume);
        copiedResume.setName("翱翔");

        System.out.println("\n=== 修改前状态 ===");
        System.out.println("原始简历: " + originalResume);
        System.out.println("副本简历: " + copiedResume);

        // 修改副本的工作经历
        copiedResume.updateWorkExperience("翱翔设计公司", 5);

        System.out.println("\n=== 修改副本工作经历后 ===");
        System.out.println("原始简历: " + originalResume);  // 原始简历也被修改！
        System.out.println("副本简历: " + copiedResume);

        // 更危险的修改方式
        originalResume.getWorkExperience().setCompany("百度");

        System.out.println("\n=== 修改原始工作经历后 ===");
        System.out.println("原始简历: " + originalResume);
        System.out.println("副本简历: " + copiedResume);  // 副本简历也被修改！
    }
}